/**
 * 深度优先搜索DFS：类似于二叉树的先序遍历，这种算法的搜索策略是尽可能深的搜索一个图。
 * 
 * 算法思想：
 * 首先访问图中某一起始顶点v,然后从v出发,访问与v相邻且未被访问的任意一个顶点w1, 再访问与w1相邻且未被访问的顶点w2，
 * ...依次重复。当不能继续向下访问时，则退回到最近的顶点，若它还有临界顶点未被访问，则从该顶点开始继续向下访问，直到该图中
 * 所有顶点都被访问为止
 */

bool visited[VRTEX_NUM];	//访问标记数组
void DFSTracerse(Graph* G)	//DFS遍历
{
	for(v=0; v<G->vertex_num; v++) visited[v]=false;	//初始化已访问标记数组
	
	for(v=0; v<G->vertex_num; v++)	//从v=0开始遍历
	{
		if(!visited[v]) DFS(G, v);
	}	
}

void DFS(Graph* G, int v)
{
	visit(v);	//访问顶点v
	visited[v]=true;//设已访问标记
	
	for(w=FirstNeighbor(G, v); w>=0; w=NextNeighbor(G, v, w))
	{
		if(!visited[w]) DFS(G, w);	//w为v的尚未访问的邻接顶点	
	}
}